////////////////////////////////////////////////////////////////////////
//HEADERS
////////////////////////////////////////////////////////////////////////
#include<stdio.h>
#include<stdlib.h>  
#include<string.h>  
#include<malloc.h>
#include<math.h>
#include<time.h>

//CABECERAS DE GSL
#include<gsl/gsl_math.h>
#include<gsl/gsl_errno.h>
#include<gsl/gsl_sort.h>
#include<gsl/gsl_sort_vector.h>
#include<gsl/gsl_matrix.h>
#include<gsl/gsl_spline.h>
//Minimizacion
#include <gsl/gsl_min.h>
#include <gsl/gsl_multimin.h>
#include<gsl/gsl_bspline.h>
#include <gsl/gsl_multifit.h>
#include <gsl/gsl_statistics.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_deriv.h>

int contadorParticulas(char *infile) 
{

  int NDAT,c;
  static FILE *pf;

  if((pf=fopen(infile,"r"))==NULL)
    printf("no puedo abrir archivo 1\n");

  NDAT=0;

  while((c=fgetc(pf))!= EOF)
    {
      if(c == '\n')
        {
          ++NDAT;
        }
    }

  fclose(pf);

  return NDAT;

}

int main(int argc, char *argv[])
{
  int i,j,ndata;
  double z,host[3],satellites[3];
  double punto,mag1,mag2,angle;

  FILE *data,*out;
  data = fopen("ang_momentos.dat","r");
  out = fopen("ang_momentos_cosenos.dat","w");
  ndata = contadorParticulas("ang_momentos.dat");

  for(i=0; i<ndata; i++)
    {
      fscanf(data,"%lf %lf %lf %lf %lf %lf %lf",&z,&host[0],&host[1],&host[2],&satellites[0],&satellites[1],&satellites[2]);

      mag1 = sqrt(host[0]*host[0]+host[1]*host[1]+host[2]*host[2]);
      mag2 = sqrt(satellites[0]*satellites[0]+satellites[1]*satellites[1]+satellites[2]*satellites[2]);	
     
      punto = 0.0;
 
      for(j=0; j<3; j++)
	{
	  punto = punto + host[j]*satellites[j];
	}

      angle = acos(punto/(mag1*mag2));

      fprintf(out,"%lf %e %e %e %e %e %e %e\n",z,host[0],host[1],host[2],satellites[0],satellites[1],satellites[2],angle*180.0/M_PI);

    }


  fclose(data);
  fclose(out);
  return 0;
}
